package com.scorpio.sdk.service;

import com.aliyun.oss.model.CannedAccessControlList;
import com.scorpio.common.exception.file.InvalidExtensionException;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;

public interface OssService {

    String getBucketName();

    //获取水印图样式
    String getLogoWatermarkStyle();

    //获取缩略图样式
    String getHumbnailStyle();

    //获取封号样式
    String getFenghaoStyle();

    //头像样式
    String getAvatarStyle();

    //上传图片
    String putImage(MultipartFile multipartFile) throws InvalidExtensionException, IOException;

    //上传音频
    String putAudio(MultipartFile multipartFile) throws InvalidExtensionException, IOException;

    //上传视频
    String putVideo(MultipartFile multipartFile) throws InvalidExtensionException, IOException;

    //上传IM图片
    String putImImage(MultipartFile multipartFile) throws InvalidExtensionException, IOException;


    //上传对象
    String putObject(String filePath, InputStream is);

    String putObject(String filePath, InputStream is,CannedAccessControlList objectAcl);

    String putObject(String filePath, File file,CannedAccessControlList objectAcl);

    //上传对象
    String putObject(String bucketName, String filePath, InputStream is);


    String putObject(String bucketName, String filePath, InputStream is,CannedAccessControlList objectAcl);

    String putObject(String filePath, File file);

    //删除文件
    void deleteObject(String filePath);

    /**
     * 获取水印图样式
     *
     * @param filePath
     * @return
     */
    String getLogoWatermarkImageUrl(String filePath);

    /**
     * 获取缩略图样式
     *
     * @param filePath
     * @return
     */
    String getHumbnailImageUrl(String filePath);

    //封号
    String getFenghaoImageUrl(String filePath);

    String getAvatarImageUrl(String filePath);

    String getCertificateUrl(String filePath, String style);

    String getCertificateUrl(String filePath);


    //设置文件访问权限
    void setObjectAcl(String filePath, CannedAccessControlList objectAcl);

    String getPeivateCertificateUrl(String filePath);

    /**
     * 获取证书地址
     *
     * @param filePath       存储路径
     * @param style          图片签名样式
     * @param expirationTime 图片路径过期时间/秒
     * @return
     */
    String getCertificateUrl(String filePath, String style, long expirationTime);

    //清空缓存重新加载
    void clanCache();

}
